iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
2
AI & Data

GA Note - 基因演算法的世界系列 第 14

【Day14】GA with you - R Package mcga R套件mcga (1)

  • 分享至 

  • xImage
  •  

明天又要開始上課了(淚奔)
時間過太快了啦
東西都還沒有做完(拖延症發作中)
明明整個假日都電腦前工作(吐血)


mcga套件

R Documetation : https://www.rdocumentation.org/packages/mcga

Description 描述

是用於解決實數(real-valued)最佳化問題
突變(mutation)則是透過 -1/+1 進行改變

Usage 用法

mcga(popsize, chsize, crossprob = 1.0, mutateprob = 0.01, 
	 elitism = 1, minval, maxval, maxiter = 10, evalFunc)

Arguments 參數

這邊的參數就會跟前面所介紹的一一對應上

popsize : 群體數量
chsize : 有多少參數
crossprob : 交配機率,預設值為 1.0
mutateprob : 突變機率,預設值為 0.01
elitism : 菁英策略,預設值為 1
minval : 最小數值
maxval : 最大數值
maxiter : 最多有多少代數,預設值為 10
evalFunc : 適應函數,預設情形都為求最小值

Example 範例

這邊會先用官網的範例示範一次
今天所使用的程式碼都來自R Documetation

下載套件

第一次使用的時候要先安裝套件

install.packages("mcga")

引用套件

在引用mcga

require("mcga")

如果出現以下訊息的話就要再多一個步驟(沒有就省略)

Loading required package: mcga
Loading required package: GA
Loading required package: foreach
Loading required package: iterators
  ____    _    
 / ___|  / \     Genetic 
| |  _  / _ \    Algorithms
| |_| |/ ___ \   
 \____/_/   \_\  version 3.2
Type 'citation("GA")' for citing this R package in publications.

Attaching package: 'GA'

The following object is masked from 'package:utils':

    de

Please use 'citation("mcga")' for citing the R package mcga

上面寫說請用citation("mcga")
就按照指示輸入

citation("mcga")

設定適應函數

尋求x[1]、x[2]、x[3]、x[4]、x[5]五個數值最佳的答案來求出其最小值

f<-function(x){
  return ((x[1]-7)^2 + (x[2]-77)^2 +(x[3]-777)^2 +(x[4]-7777)^2 +(x[5]-77777)^2)
}

執行基因演算法

這邊的設定都先跟官網一樣

m <- mcga( popsize=200, 
           chsize=5, 
           minval=0.0, 
           maxval=999999999.9, 
           maxiter=2500, 
           crossprob=1.0, 
           mutateprob=0.01, 
           evalFunc=f)

印出結果

cat("Best chromosome:\n")
print(m$population[1,])
cat("Cost: ",m$costs[1],"\n")

你以為這樣就完了嗎?!!!!
不~
我們來回顧一下剛剛執行的結果吧~
由於基因演算法 每個人的答案不一定會是一樣的
那就以我剛剛的輸出結果來講解

> cat("Best chromosome:\n")
Best chromosome:
> print(m$population[1,])
[1] 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
> cat("Cost: ",m$costs[1],"\n")
Cost:  3827.006 

這邊可以看到m$population[1,]
所得到的結果是 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
是這樣一連串的東西
那這些是什麼呢???
請往上回憶一下下剛剛chsize的設定
剛剛介紹說chsize表示有多少參數對吧
所以chsize這個就是代表這五個參數計算出來的結果
這時候你心中一定有個問號就是那個是數字嗎???
(沒有沒關係,就表示你很聰明知道那是啥)
我們分別把他抓出來看

> print(m$population[1,])
[1] 3.958119e-01 1.549891e+01 7.770356e+02 7.777070e+03 7.777600e+04
> print(m$population[1,][1])
[1] 0.3958119
> print(m$population[1,][2])
[1] 15.49891
> print(m$population[1,][3])
[1] 777.0356
> print(m$population[1,][4])
[1] 7777.07
> print(m$population[1,][5])
[1] 77776

這樣就可以知道其實數值算出來個別為
[1]: 0.3958119
[2]: 15.49891
[3]: 777.0356
[4]: 7777.07
[5]: 77776
把這個答案帶入原本的適應程度的函數 f 計算

f = (0.3958119-7)^2 + (15.49891-77)^2 +(777.0356-777)^2 +(7777.07-7777)^2 +(77776-77777)^2

就會得到 3827.006 (有沒有突然眼熟這個數字)
這個數字就是剛剛的 Cost
沒有沒關係 在列印一次總該有印象了吧~

> cat("Cost: ",m$costs[1],"\n")
Cost:  3827.006 

有沒有覺得很神奇(<- 自己說)
這就是該染色體(chromosome)的適應程度
可以發現這樣的結果是最適合的


不知道這樣的講法大家能不能更加認識
我想就這樣一步一步帶大家瞭解基因演算法的奧妙(誤)

今天的程式碼也會放到Github


相關資料來源:
R Documetation : https://www.rdocumentation.org/packages/mcga


上一篇
【Day13】GA with you - R Related Package Introduction R套件介紹
下一篇
【Day15】GA with you - R Package mcga R套件mcga (2)
系列文
GA Note - 基因演算法的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言